package com.ailanyin.modules.flowable.service;


import com.ailanyin.common.database.result.CommonPage;
import com.ailanyin.modules.flowable.domain.bo.WfProcessBo;
import com.ailanyin.modules.flowable.domain.vo.WfDefinitionVo;
import com.ailanyin.modules.flowable.domain.vo.WfDetailVo;
import com.ailanyin.modules.flowable.domain.vo.WfTaskVo;

import java.util.Map;

/**
 * 流程实例Service接口
 *
 * @author ailanyin
 * @date 2022-12-09
 */
public interface IWfProcessService {

    /**
     * 查询可发起流程列表
     *
     * @param pageNum  页面
     * @param pageSize 个数
     * @return 分页 list
     */
    CommonPage<WfDefinitionVo> processList(Integer pageNum, Integer pageSize);

    /**
     * 查询流程部署关联表单信息
     *
     * @param definitionId 流程定义ID
     * @param deployId     部署ID
     * @return 表单内容 json
     */
    String selectFormContent(String definitionId, String deployId);

    /**
     * 启动流程实例
     *
     * @param procDefId 流程定义ID
     * @param variables 扩展参数
     */
    void startProcess(String procDefId, Map<String, Object> variables);

    /**
     * 通过DefinitionKey启动流程
     *
     * @param procDefKey 流程定义Key
     * @param variables  扩展参数
     */
    void startProcessByDefKey(String procDefKey, Map<String, Object> variables);

    /**
     * 读取xml文件
     *
     * @param processDefId 流程定义ID
     * @return readUtf8
     */
    String queryBpmnXmlById(String processDefId);

    /**
     * 查询流程任务详情信息
     *
     * @param procInsId 流程实例ID
     * @param deployId  流程部署ID
     * @param taskId    任务ID
     * @return WfDetailVo
     */
    WfDetailVo queryProcessDetail(String procInsId, String deployId, String taskId);

    /**
     * 查询我的流程列表
     *
     * @param pageNum  页面
     * @param pageSize 个数
     * @return 分页 list
     */
    CommonPage<WfTaskVo> queryPageOwnProcessList(Integer pageNum, Integer pageSize);

    /**
     * 查询代办任务列表
     *
     * @param pageNum  页面
     * @param pageSize 个数
     * @return 分页 list
     */
    CommonPage<WfTaskVo> queryPageTodoProcessList(Integer pageNum, Integer pageSize);

    /**
     * 查询已办任务列表
     *
     * @param pageNum  页面
     * @param pageSize 个数
     * @return 分页 list
     */
    CommonPage<WfTaskVo> queryPageFinishedProcessList(Integer pageNum, Integer pageSize);

    /**
     * 查询待签任务列表
     *
     * @param processBo  流程业务对象
     * @param pageNum  页面
     * @param pageSize 个数
     * @return 分页 list
     */
    CommonPage<WfTaskVo> queryPageClaimProcessList(WfProcessBo processBo, Integer pageNum, Integer pageSize);
}
